home *** CD-ROM | disk | FTP | other *** search
- /*
- $AUTHOR: Fernando Nunes e Manuel Lemos (UpperDesign@zeus.ci.ua.pt)
- $VER: AlinharNaVertical 1.00 (2.10.94)
- Descriçao: Macro em ARexx para o FinalWriter para alinhar objectos gráficos
- na vertical.
- */
-
- options results
-
- GraphicTool
- SetMeasure
-
- /* obter uma lista dos objectos seleccionados */
- selecionados = 0
- FirstObject SELECTED
- do until result = 0
- selecionados = selecionados + 1
- objectid.selecionados = result
- NextObject objectid.selecionados SELECTED
- end
-
- if selecionados > 1 then
- do
-
- call addlib("rexxreqtools.library", 0, -30, 0)
-
- NL = '0a'x
-
- ALINHAR_ACIMA = 1
- ALINHAR_AO_CENTRO = 2
- ALINHAR_ABAIXO = 3
- AJUDA = 4
- CANCELAR = 0
-
- do until alinhar ~= AJUDA
- alinhar = rtezrequest( "Alinhamento vertical de objectos gráficos",,
- "A_cima|Ao _centro|A_baixo|_Ajuda|Cancelar",,
- "" )
-
- if alinhar = AJUDA then
- call rtezrequest( "Alinhamento vertical de objectos gráficos" || NL || NL||,
- "Acima - alinha os objectos selecionados" || NL ||,
- "pelo topo do objecto mais acima." || NL || NL,
- "Ao centro - alinha os objectos selecionados" || NL ||,
- "a meio entre o objecto mais acima e o " || NL ||,
- "objecto mais abaixo." || NL || NL,
- "Abaixo - alinha os objectos selecionados" || NL ||,
- "pela base do objecto mais abaixo.",,
- "Tou a ver",,
- "Ajuda")
- end
- if alinhar = CANCELAR then
- return
-
- OBJECTO_LINHA = 2
-
- /* determinar a coordenada dos objectos mais acima e mais abaixo */
- do objecto = 1 to selecionados
- GetObjectCoords objectid.objecto
- coords = RESULT
- PARSE VAR coords pagina esquerda cima direita baixo
- GetObjectType objectid.objecto
- tipo = result
-
- /* linhas */
- if tipo = OBJECTO_LINHA then
- do
- if cima > baixo then
- do
- troca = cima
- cima = baixo
- baixo = troca
- end
- end
- else
- baixo = cima + baixo
- if objecto = 1 | cima < mais_acima then
- mais_acima = cima
- if objecto = 1 | baixo > mais_abaixo then
- mais_abaixo = baixo
- end
-
- if alinhar = ALINHAR_ACIMA then
- /* mover os objectos para cima */
- do objecto = 1 to selecionados
- GetObjectCoords objectid.objecto
- coords = RESULT
- PARSE VAR coords pagina esquerda cima direita baixo
- GetObjectType objectid.objecto
- tipo = result
-
- /* linhas */
- if tipo = OBJECTO_LINHA then
- do
- if cima < baixo then
- do
- baixo = mais_acima + baixo - cima
- cima = mais_acima
- end
- else
- do
- cima = mais_acima + cima - baixo
- baixo = mais_acima
- end
- end
- else
- cima = mais_acima
- SetObjectCoords objectid.objecto pagina esquerda cima direita baixo
- end
- if alinhar = ALINHAR_AO_CENTRO then
- do
- /* centrar os objectos */
- centro = ( mais_abaixo + mais_acima ) / 2
- do objecto = 1 to selecionados
- GetObjectCoords objectid.objecto
- coords = RESULT
- PARSE VAR coords pagina esquerda cima direita baixo
- GetObjectType objectid.objecto
- tipo = result
-
- /* linhas */
- if tipo = OBJECTO_LINHA then
- do
- meia_altura = ( baixo - cima ) / 2
- baixo = centro + meia_altura
- end
- else
- meia_altura = baixo / 2
- cima = centro - meia_altura
- SetObjectCoords objectid.objecto pagina esquerda cima direita baixo
- end
- end
- if alinhar = ALINHAR_ABAIXO then
- /* mover os objectos para a baixo */
- do objecto = 1 to selecionados
- GetObjectCoords objectid.objecto
- coords = RESULT
- PARSE VAR coords pagina esquerda cima direita baixo
- GetObjectType objectid.objecto
- tipo = result
-
- /* linhas */
- if tipo = OBJECTO_LINHA then
- do
- if cima < baixo then
- do
- cima = mais_abaixo - baixo + cima
- baixo = mais_abaixo
- end
- else
- do
- baixo = mais_abaixo - cima + baixo
- cima = mais_abaixo
- end
- end
- else
- cima = mais_abaixo - baixo
- SetObjectCoords objectid.objecto pagina esquerda cima direita baixo
- end
-
- /* voltar a selecionar todos os objectos selecionados antes */
- do objecto = 1 to selecionados
- SelectObject objectid.objecto MULTIPLE
- end
- redraw
- end
-